//#include <iostream>
//#include <string>
//using namespace std;
//
//string str;
//int ret = 110;
//
//bool isval(string s)
//{
//    if (s.empty())
//        return true;
//    int left = 0;
//    int right = s.size() - 1;
//    while (left < right)
//    {
//        if (s[left] != s[right])
//            return false;
//        left++;
//        right--;
//    }
//    return true;
//}
//
//int main()
//{
//    cin >> str;
//    int n = str.size();
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = i + 1; j < n; j++)
//        {
//            string s = str.substr(i, j - i + 1);
//            if (isval(s))
//            {
//                if (s.size() > 1 && ret > s.size())
//                    ret = s.size();
//            }
//        }
//    }
//    cout << (ret == 110 ? -1 : ret) << endl;
//    return 0;
//}
// 
//
//#include <iostream>
//#include <string>
//using namespace std;
//
//string str;
//int n;
//int ret = -1;
//
//int main()
//{
//    cin >> str;
//    n = str.size();
//    int i = 0;
//    for (i = 0; i < n; i++)
//    {
//        if (i + 1 < n && str[i] == str[i + 1])
//        {
//            ret = 2;
//            break;
//        }
//
//        if (i + 2 < n && str[i] == str[i + 2])
//        {
//            ret = 3;
//        }
//    }
//    cout << ret << endl;
//    return 0;
//}


//
//#include <iostream>
//using namespace std;
//
//int n;
//long long sum1;
//long long sum2;
//
//int main()
//{
//    cin >> n;
//    for (int i = 0; i < n; i++)
//    {
//        long long x = 0;
//        cin >> x;
//        if (i % 2 == 0)
//            sum1 += x;
//        else
//            sum2 += x;
//    }
//    cout << (sum1 > sum2 ? sum1 : sum2) << endl;
//    return 0;
//}


//#include <iostream>
//using namespace std;
//
//const int N = 2e5 + 10;
//int n;
//int arr[N];
//int f[N];
//int g[N];
//
//int main()
//{
//
//    cin >> n;
//    for (int i = 1; i <= n; i++)
//        cin >> arr[i];
//
//    for (int i = 1; i <= n; i++)
//    {
//        f[i] = g[i - 1] + arr[i];
//        g[i] = max(f[i - 1], g[i - 1]);
//    }
//
//    cout << max(f[n], g[n]) << endl;
//    return 0;
//}

//#include <iostream>
//using namespace std;
//
//const int N = 1e6 + 10;
//int n;
//int p;
//int a[N];
//int ret;
//int k;
//
//int main()
//{
//    cin >> n >> p;
//
//    for (int i = 0; i < n; i++)
//    {
//        cin >> a[i];
//        k = max(a[i], k);
//    }
//
//    for (int i = 1; i <= k; i++)
//    {
//        int tmp = 0;
//        for (int j = 0; j < n; j++)
//        {
//            if (abs(a[j] - i) <= p)
//            {
//                tmp++;
//            }
//        }
//        ret = max(tmp, ret);
//    }
//    cout << ret << endl;
//    return 0;
//}

#include <iostream>
#include <algorithm>
using namespace std;

const int N = 1e6 + 10;
int n;
int p;
int arr[N];
int ret;

int main()
{
    cin >> n >> p;
    for (int i = 0; i < n; i++)
        cin >> arr[i];
    sort(arr, arr + n);
    int left = 0;
    int right = 0;
    p *= 2;
    while (right < n)
    {
        while (arr[right] - arr[left] > p)
        {
            left++;
        }
        ret = max(ret, right - left + 1);
        right++;
    }
    cout << ret << endl;
    return 0;
}